﻿#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include <conio.h>
#include <time.h>

void tips()
{
	//2.清屏函数；
	//system("cls");
	printf("========================3.打字游戏==========================\n");
	printf("===================4.按任意键开启游戏=======================\n");
	printf("=====================5.按ESC退出游戏========================\n");
	//6.getch()函数读入一个字符时,不用 enter 代码会继续跑。
		//而getchar()函数在读入一个字符时，必须按一下 enter 键，该代码才会继续运行。
		//这里是表示程序暂停，必须接收一个字符，才能继续往下执行；
	char ch = _getch();

	//7.ascii码27，是esc；
	if (ch == 27)
	{
		exit(0);
	}

}
void rand_ch(char* arr)
{
	//9.加入随机数种子；
	srand((unsigned int)time(NULL));
	for (int i = 0; i < 50; i++)
	{
		//10.rand()%26，取值为：0-25。a为97.就是说，arr[i]的取值为a-z，z是122-->a+25。
			//arr[i]存储字符时，不能直接存数字，只能使用'a'+1的形式，存'b'。
		arr[i] = rand() % 26 + 'a';
	}
	//printf("%s\n", arr);//mknvishtjxufemwmktjgpujnwilwjeklpczrtcaibqbslqmehj
}
void start_game(char* arr)
{
	//14.定义一个计时器；开始时间，结束时间；
	int start_time;
	int end_time;
	char ch;
	//24.计数器；就是命中的数字，记录下个数；
	int count = 0;
	for (int i = 0; i < 50; i++)
	{
		//15.接收字符，和6一样；
		ch = _getch();
		if (i == 0)
		{
			//16.i=0，程序开始，记录第一次的时间。单位是秒s，从1970-01-01开始算起，到现在开始是多少秒；
			start_time = time(NULL);
		}
		if (ch == arr[i])
		{
			//18.命中了字符，就在count上加1；count存的是，命中的字符数；
			count++;
			printf("17.输入的字符命中字符数组元素arr[%d]，即：%c\n", i, ch);//17.输入的字符命中字符数组元素arr[29]，即：h
		}
		else
		{
			printf("19.很可惜，没有命中字符数组元素arr[%d]，继续加油！_\n", i);//19.很可惜，没有命中字符数组元素arr[30]，继续加油！_
		}
	}
	//20.字符数组arr里面的50个字符，全部都匹配完成了，记录一下结束时间；
	end_time = time(NULL);
	printf("21.匹配这一轮50个字符的字符数组arr，你的总共用时为：%d（秒）\n", end_time - start_time);//21.匹配这一轮50个字符的字符数组arr，你的总共用时为：22（秒）
	//23.这里的%.f保留小数点后零位和(%.0f)作用一样，%.2f是保留两位小数；%%是输出一个百分号%；
	printf("22.那么这一轮的正确（命中）率为：%.2f%%\n", count * 1.0 / 50 * 100);//22.那么这一轮的正确（命中）率为：60.00%
	if (count * 1.0 / 50 * 100 > 80.0)
	{
		printf("25.嚯，胸嘚，你的正确率超过了80%%！真是打字小能手啊！\n");
	}
}

//main117：案例：打字游戏
int main117()
{
	//12.定义一个长度为51的字符数组，初始化全部为0。即arr[50]为\0，为字符串的结束标志。
		//上面的arr存储了50个字符，到arr[49]就截止，再加上arr[50]的\0。%s输出时，才不会出现 abc烫烫烫
	char arr[51] = { 0 };
	//memset(arr, 51, 0);
	//rand_ch(arr);
	while (1)
	{
		//1.提示；
		tips();
		//8.随机字符串；
		rand_ch(arr);
		//11.输出字符数组arr，%s会输出遇到\0之前的字符；\n换行，\n\n换两行。
		printf("%s\n\n", arr);
		//13.时间，正确率；
		start_game(arr);
	}

	system("pause");
	return EXIT_SUCCESS;
}